using nmspDataWEB;
using nmspEDITORIAL;

namespace nmspLIBRO
{
    public class Libro
    {
        private string titulo; //nvarchar(60) NOT NULL
        private string imagen_libro; //image NULL
        private string autor;
        private nmspEDITORIAL.Editorial ed; //Objeto Editorial

        //****************************************************************
        //Para saber si el objeto editorial es nulo o no
        private bool esObjetoEditorialNulo()
        {
            if (this.ed == null)
                return true;
            else
                return false;
        }

        //****************************************************************
        public Libro()
        { 
        }

        //*************************************************************************
        //Constructor del libro con los datos del libro + el nombre de la editorial
        public Libro(string ptitulo,string pimagen_libro, string pautor, string pnombre_editorial)
        {
            this.titulo = ptitulo;
            this.imagen_libro = pimagen_libro;
            this.autor = pautor;
            set_nombre_editorial(pnombre_editorial); //Se crea una objeto Editorial si no existe
        }

        //*************************************************************************
        //Constructor del libro con los datos del libro + el objeto editorial
        public Libro(string ptitulo, string pimagen_libro, string pautor, nmspEDITORIAL.Editorial ped)
        {
            this.titulo = ptitulo;
            this.imagen_libro = pimagen_libro;
            this.autor = pautor;
            this.ed = new Editorial(ped); //Se crea una objeto Editorial si no existe
        }

        //*************************************************************************
        //Constructor del libro que recibe un libro
        public Libro(nmspLIBRO.Libro UnLibro)
        {
            this.titulo = UnLibro.get_titulo();
            this.imagen_libro = UnLibro.get_imagen_libro();
            this.autor = UnLibro.getAutor();
            this.ed = new Editorial(UnLibro.getEditorial());
        }

        // ***************** datos del titulo del libro ******************
        public string get_titulo() //nvarchar(60) NOT NULL,
        { return this.titulo; }

        public void set_titulo(string p_titulo) //nvarchar(60) NOT NULL,
        { this.titulo = p_titulo; }

        // ***************** datos de la imagen del libro *****************
        public string get_imagen_libro() //image NULL,
        { return this.imagen_libro; }

        public void set_imagen_libro(string p_imagen_libro) //image NULL,
        { this.imagen_libro = p_imagen_libro; }

        // ***************** datos del autor del libro *****************
        public string getAutor()
        { return this.autor; }

        public void setAutor(string p_autor) 
        { this.autor = p_autor; }

        // ***************************************************************************
        // Retorna una copia de los datos del objeto pero con otra referencia a memoria 
        public nmspEDITORIAL.Editorial getEditorial()
        {
            return this.ed.getEditorial();
        }

        // ***************************************************************************
        // Asignar una objeto editorial a la editorial del objeto Libro
        public void setEditorial(nmspEDITORIAL.Editorial UnaEditorial)
        {
            this.ed = new Editorial(UnaEditorial);
        }

        // ***************** Correspondiente a la clase editorial *****************
        public void set_nombre_editorial(string p_nombre_editorial)
        {
            if (esObjetoEditorialNulo())
                this.ed = new Editorial(p_nombre_editorial);
            else
                this.ed.set_nombre(p_nombre_editorial);
        }

        // *************************************************************************
        // Funcion get que retorna una copia del objeto pero no el mismo objeto
        public nmspLIBRO.Libro getLibro()
        {
            //Se retorna una copia del autor
            nmspLIBRO.Libro LibroAuxiliar = new Libro(this.titulo, this.imagen_libro, this.autor, this.ed);
            return LibroAuxiliar;
        }
    }
}
